package org.xtext.example.mydsl.parser.antlr.internal; 

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.xtext.example.mydsl.services.MyDslGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
@SuppressWarnings("all")
public class InternalMyDslParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_VARIABLE", "RULE_TVAR", "RULE_INT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'Types{'", "';'", "'}'", "'Declarations{'", "'Main{'", "'='", "'let'", "':'", "'in'", "'\\\\('", "').'", "'('", "')'", "'/\\\\'", "'.'", "'['", "']'", "'->'", "'forall'"
    };
    public static final int RULE_ID=4;
    public static final int T__29=29;
    public static final int T__28=28;
    public static final int RULE_TVAR=6;
    public static final int T__27=27;
    public static final int T__26=26;
    public static final int T__25=25;
    public static final int T__24=24;
    public static final int T__23=23;
    public static final int T__22=22;
    public static final int RULE_ANY_OTHER=12;
    public static final int T__21=21;
    public static final int T__20=20;
    public static final int RULE_SL_COMMENT=10;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=9;
    public static final int T__30=30;
    public static final int T__19=19;
    public static final int T__31=31;
    public static final int RULE_STRING=8;
    public static final int T__16=16;
    public static final int T__15=15;
    public static final int T__18=18;
    public static final int RULE_VARIABLE=5;
    public static final int T__17=17;
    public static final int T__14=14;
    public static final int T__13=13;
    public static final int RULE_INT=7;
    public static final int RULE_WS=11;

    // delegates
    // delegators


        public InternalMyDslParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalMyDslParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalMyDslParser.tokenNames; }
    public String getGrammarFileName() { return "../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g"; }



     	private MyDslGrammarAccess grammarAccess;
     	
        public InternalMyDslParser(TokenStream input, MyDslGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "FileSF";	
       	}
       	
       	@Override
       	protected MyDslGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start "entryRuleFileSF"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:67:1: entryRuleFileSF returns [EObject current=null] : iv_ruleFileSF= ruleFileSF EOF ;
    public final EObject entryRuleFileSF() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleFileSF = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:68:2: (iv_ruleFileSF= ruleFileSF EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:69:2: iv_ruleFileSF= ruleFileSF EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getFileSFRule()); 
            }
            pushFollow(FOLLOW_ruleFileSF_in_entryRuleFileSF75);
            iv_ruleFileSF=ruleFileSF();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleFileSF; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleFileSF85); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleFileSF"


    // $ANTLR start "ruleFileSF"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:76:1: ruleFileSF returns [EObject current=null] : this_Prog_0= ruleProg ;
    public final EObject ruleFileSF() throws RecognitionException {
        EObject current = null;

        EObject this_Prog_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:79:28: (this_Prog_0= ruleProg )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:81:5: this_Prog_0= ruleProg
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getFileSFAccess().getProgParserRuleCall()); 
                  
            }
            pushFollow(FOLLOW_ruleProg_in_ruleFileSF131);
            this_Prog_0=ruleProg();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_Prog_0; 
                      afterParserOrEnumRuleCall();
                  
            }

            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleFileSF"


    // $ANTLR start "entryRuleProg"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:97:1: entryRuleProg returns [EObject current=null] : iv_ruleProg= ruleProg EOF ;
    public final EObject entryRuleProg() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleProg = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:98:2: (iv_ruleProg= ruleProg EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:99:2: iv_ruleProg= ruleProg EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getProgRule()); 
            }
            pushFollow(FOLLOW_ruleProg_in_entryRuleProg165);
            iv_ruleProg=ruleProg();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleProg; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleProg175); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleProg"


    // $ANTLR start "ruleProg"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:106:1: ruleProg returns [EObject current=null] : ( (otherlv_0= 'Types{' ( ( (lv_td_1_0= ruleTypeDich ) ) otherlv_2= ';' )* otherlv_3= '}' )? (otherlv_4= 'Declarations{' ( ( (lv_d_5_0= ruleDich ) ) otherlv_6= ';' )* otherlv_7= '}' )? otherlv_8= 'Main{' ( (lv_main_9_0= ruleTerm ) ) otherlv_10= '}' ) ;
    public final EObject ruleProg() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_10=null;
        EObject lv_td_1_0 = null;

        EObject lv_d_5_0 = null;

        EObject lv_main_9_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:109:28: ( ( (otherlv_0= 'Types{' ( ( (lv_td_1_0= ruleTypeDich ) ) otherlv_2= ';' )* otherlv_3= '}' )? (otherlv_4= 'Declarations{' ( ( (lv_d_5_0= ruleDich ) ) otherlv_6= ';' )* otherlv_7= '}' )? otherlv_8= 'Main{' ( (lv_main_9_0= ruleTerm ) ) otherlv_10= '}' ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:110:1: ( (otherlv_0= 'Types{' ( ( (lv_td_1_0= ruleTypeDich ) ) otherlv_2= ';' )* otherlv_3= '}' )? (otherlv_4= 'Declarations{' ( ( (lv_d_5_0= ruleDich ) ) otherlv_6= ';' )* otherlv_7= '}' )? otherlv_8= 'Main{' ( (lv_main_9_0= ruleTerm ) ) otherlv_10= '}' )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:110:1: ( (otherlv_0= 'Types{' ( ( (lv_td_1_0= ruleTypeDich ) ) otherlv_2= ';' )* otherlv_3= '}' )? (otherlv_4= 'Declarations{' ( ( (lv_d_5_0= ruleDich ) ) otherlv_6= ';' )* otherlv_7= '}' )? otherlv_8= 'Main{' ( (lv_main_9_0= ruleTerm ) ) otherlv_10= '}' )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:110:2: (otherlv_0= 'Types{' ( ( (lv_td_1_0= ruleTypeDich ) ) otherlv_2= ';' )* otherlv_3= '}' )? (otherlv_4= 'Declarations{' ( ( (lv_d_5_0= ruleDich ) ) otherlv_6= ';' )* otherlv_7= '}' )? otherlv_8= 'Main{' ( (lv_main_9_0= ruleTerm ) ) otherlv_10= '}'
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:110:2: (otherlv_0= 'Types{' ( ( (lv_td_1_0= ruleTypeDich ) ) otherlv_2= ';' )* otherlv_3= '}' )?
            int alt2=2;
            int LA2_0 = input.LA(1);

            if ( (LA2_0==13) ) {
                alt2=1;
            }
            switch (alt2) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:110:4: otherlv_0= 'Types{' ( ( (lv_td_1_0= ruleTypeDich ) ) otherlv_2= ';' )* otherlv_3= '}'
                    {
                    otherlv_0=(Token)match(input,13,FOLLOW_13_in_ruleProg213); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_0, grammarAccess.getProgAccess().getTypesKeyword_0_0());
                          
                    }
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:114:1: ( ( (lv_td_1_0= ruleTypeDich ) ) otherlv_2= ';' )*
                    loop1:
                    do {
                        int alt1=2;
                        int LA1_0 = input.LA(1);

                        if ( (LA1_0==RULE_ID) ) {
                            alt1=1;
                        }


                        switch (alt1) {
                    	case 1 :
                    	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:114:2: ( (lv_td_1_0= ruleTypeDich ) ) otherlv_2= ';'
                    	    {
                    	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:114:2: ( (lv_td_1_0= ruleTypeDich ) )
                    	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:115:1: (lv_td_1_0= ruleTypeDich )
                    	    {
                    	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:115:1: (lv_td_1_0= ruleTypeDich )
                    	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:116:3: lv_td_1_0= ruleTypeDich
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getProgAccess().getTdTypeDichParserRuleCall_0_1_0_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleTypeDich_in_ruleProg235);
                    	    lv_td_1_0=ruleTypeDich();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getProgRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"td",
                    	              		lv_td_1_0, 
                    	              		"TypeDich");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }

                    	    otherlv_2=(Token)match(input,14,FOLLOW_14_in_ruleProg247); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_2, grammarAccess.getProgAccess().getSemicolonKeyword_0_1_1());
                    	          
                    	    }

                    	    }
                    	    break;

                    	default :
                    	    break loop1;
                        }
                    } while (true);

                    otherlv_3=(Token)match(input,15,FOLLOW_15_in_ruleProg261); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_3, grammarAccess.getProgAccess().getRightCurlyBracketKeyword_0_2());
                          
                    }

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:140:3: (otherlv_4= 'Declarations{' ( ( (lv_d_5_0= ruleDich ) ) otherlv_6= ';' )* otherlv_7= '}' )?
            int alt4=2;
            int LA4_0 = input.LA(1);

            if ( (LA4_0==16) ) {
                alt4=1;
            }
            switch (alt4) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:140:5: otherlv_4= 'Declarations{' ( ( (lv_d_5_0= ruleDich ) ) otherlv_6= ';' )* otherlv_7= '}'
                    {
                    otherlv_4=(Token)match(input,16,FOLLOW_16_in_ruleProg276); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_4, grammarAccess.getProgAccess().getDeclarationsKeyword_1_0());
                          
                    }
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:144:1: ( ( (lv_d_5_0= ruleDich ) ) otherlv_6= ';' )*
                    loop3:
                    do {
                        int alt3=2;
                        int LA3_0 = input.LA(1);

                        if ( (LA3_0==RULE_ID) ) {
                            alt3=1;
                        }


                        switch (alt3) {
                    	case 1 :
                    	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:144:2: ( (lv_d_5_0= ruleDich ) ) otherlv_6= ';'
                    	    {
                    	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:144:2: ( (lv_d_5_0= ruleDich ) )
                    	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:145:1: (lv_d_5_0= ruleDich )
                    	    {
                    	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:145:1: (lv_d_5_0= ruleDich )
                    	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:146:3: lv_d_5_0= ruleDich
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getProgAccess().getDDichParserRuleCall_1_1_0_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleDich_in_ruleProg298);
                    	    lv_d_5_0=ruleDich();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getProgRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"d",
                    	              		lv_d_5_0, 
                    	              		"Dich");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }

                    	    otherlv_6=(Token)match(input,14,FOLLOW_14_in_ruleProg310); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_6, grammarAccess.getProgAccess().getSemicolonKeyword_1_1_1());
                    	          
                    	    }

                    	    }
                    	    break;

                    	default :
                    	    break loop3;
                        }
                    } while (true);

                    otherlv_7=(Token)match(input,15,FOLLOW_15_in_ruleProg324); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_7, grammarAccess.getProgAccess().getRightCurlyBracketKeyword_1_2());
                          
                    }

                    }
                    break;

            }

            otherlv_8=(Token)match(input,17,FOLLOW_17_in_ruleProg338); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_8, grammarAccess.getProgAccess().getMainKeyword_2());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:174:1: ( (lv_main_9_0= ruleTerm ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:175:1: (lv_main_9_0= ruleTerm )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:175:1: (lv_main_9_0= ruleTerm )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:176:3: lv_main_9_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getProgAccess().getMainTermParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleProg359);
            lv_main_9_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getProgRule());
              	        }
                     		set(
                     			current, 
                     			"main",
                      		lv_main_9_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_10=(Token)match(input,15,FOLLOW_15_in_ruleProg371); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_10, grammarAccess.getProgAccess().getRightCurlyBracketKeyword_4());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleProg"


    // $ANTLR start "entryRuleDich"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:204:1: entryRuleDich returns [EObject current=null] : iv_ruleDich= ruleDich EOF ;
    public final EObject entryRuleDich() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDich = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:205:2: (iv_ruleDich= ruleDich EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:206:2: iv_ruleDich= ruleDich EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDichRule()); 
            }
            pushFollow(FOLLOW_ruleDich_in_entryRuleDich407);
            iv_ruleDich=ruleDich();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDich; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleDich417); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDich"


    // $ANTLR start "ruleDich"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:213:1: ruleDich returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_term_2_0= ruleTerm ) ) ) ;
    public final EObject ruleDich() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Token otherlv_1=null;
        EObject lv_term_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:216:28: ( ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_term_2_0= ruleTerm ) ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:217:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_term_2_0= ruleTerm ) ) )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:217:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_term_2_0= ruleTerm ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:217:2: ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_term_2_0= ruleTerm ) )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:217:2: ( (lv_name_0_0= RULE_ID ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:218:1: (lv_name_0_0= RULE_ID )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:218:1: (lv_name_0_0= RULE_ID )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:219:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleDich459); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_0_0, grammarAccess.getDichAccess().getNameIDTerminalRuleCall_0_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getDichRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_0_0, 
                      		"ID");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,18,FOLLOW_18_in_ruleDich476); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getDichAccess().getEqualsSignKeyword_1());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:239:1: ( (lv_term_2_0= ruleTerm ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:240:1: (lv_term_2_0= ruleTerm )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:240:1: (lv_term_2_0= ruleTerm )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:241:3: lv_term_2_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getDichAccess().getTermTermParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleDich497);
            lv_term_2_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getDichRule());
              	        }
                     		set(
                     			current, 
                     			"term",
                      		lv_term_2_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDich"


    // $ANTLR start "entryRuleNrif"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:265:1: entryRuleNrif returns [EObject current=null] : iv_ruleNrif= ruleNrif EOF ;
    public final EObject entryRuleNrif() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleNrif = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:266:2: (iv_ruleNrif= ruleNrif EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:267:2: iv_ruleNrif= ruleNrif EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getNrifRule()); 
            }
            pushFollow(FOLLOW_ruleNrif_in_entryRuleNrif533);
            iv_ruleNrif=ruleNrif();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleNrif; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleNrif543); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleNrif"


    // $ANTLR start "ruleNrif"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:274:1: ruleNrif returns [EObject current=null] : ( (otherlv_0= RULE_ID ) ) ;
    public final EObject ruleNrif() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;

         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:277:28: ( ( (otherlv_0= RULE_ID ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:278:1: ( (otherlv_0= RULE_ID ) )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:278:1: ( (otherlv_0= RULE_ID ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:279:1: (otherlv_0= RULE_ID )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:279:1: (otherlv_0= RULE_ID )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:280:3: otherlv_0= RULE_ID
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getNrifRule());
              	        }
                      
            }
            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleNrif587); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		newLeafNode(otherlv_0, grammarAccess.getNrifAccess().getNomeDichCrossReference_0()); 
              	
            }

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleNrif"


    // $ANTLR start "entryRuleTerm"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:299:1: entryRuleTerm returns [EObject current=null] : iv_ruleTerm= ruleTerm EOF ;
    public final EObject entryRuleTerm() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTerm = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:300:2: (iv_ruleTerm= ruleTerm EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:301:2: iv_ruleTerm= ruleTerm EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getTermRule()); 
            }
            pushFollow(FOLLOW_ruleTerm_in_entryRuleTerm622);
            iv_ruleTerm=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleTerm; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleTerm632); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTerm"


    // $ANTLR start "ruleTerm"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:308:1: ruleTerm returns [EObject current=null] : (this_Var_0= ruleVar | this_Abs_1= ruleAbs | this_App_2= ruleApp | this_Uq_3= ruleUq | ( ( '[' )=>this_Tapp_4= ruleTapp ) | this_Nrif_5= ruleNrif | this_Let_6= ruleLet ) ;
    public final EObject ruleTerm() throws RecognitionException {
        EObject current = null;

        EObject this_Var_0 = null;

        EObject this_Abs_1 = null;

        EObject this_App_2 = null;

        EObject this_Uq_3 = null;

        EObject this_Tapp_4 = null;

        EObject this_Nrif_5 = null;

        EObject this_Let_6 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:311:28: ( (this_Var_0= ruleVar | this_Abs_1= ruleAbs | this_App_2= ruleApp | this_Uq_3= ruleUq | ( ( '[' )=>this_Tapp_4= ruleTapp ) | this_Nrif_5= ruleNrif | this_Let_6= ruleLet ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:312:1: (this_Var_0= ruleVar | this_Abs_1= ruleAbs | this_App_2= ruleApp | this_Uq_3= ruleUq | ( ( '[' )=>this_Tapp_4= ruleTapp ) | this_Nrif_5= ruleNrif | this_Let_6= ruleLet )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:312:1: (this_Var_0= ruleVar | this_Abs_1= ruleAbs | this_App_2= ruleApp | this_Uq_3= ruleUq | ( ( '[' )=>this_Tapp_4= ruleTapp ) | this_Nrif_5= ruleNrif | this_Let_6= ruleLet )
            int alt5=7;
            int LA5_0 = input.LA(1);

            if ( (LA5_0==RULE_VARIABLE) ) {
                alt5=1;
            }
            else if ( (LA5_0==22) ) {
                alt5=2;
            }
            else if ( (LA5_0==24) ) {
                alt5=3;
            }
            else if ( (LA5_0==26) ) {
                alt5=4;
            }
            else if ( (LA5_0==28) && (synpred1_InternalMyDsl())) {
                alt5=5;
            }
            else if ( (LA5_0==RULE_ID) ) {
                alt5=6;
            }
            else if ( (LA5_0==19) ) {
                alt5=7;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 5, 0, input);

                throw nvae;
            }
            switch (alt5) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:313:5: this_Var_0= ruleVar
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTermAccess().getVarParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleVar_in_ruleTerm679);
                    this_Var_0=ruleVar();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Var_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:323:5: this_Abs_1= ruleAbs
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTermAccess().getAbsParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleAbs_in_ruleTerm706);
                    this_Abs_1=ruleAbs();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Abs_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 3 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:333:5: this_App_2= ruleApp
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTermAccess().getAppParserRuleCall_2()); 
                          
                    }
                    pushFollow(FOLLOW_ruleApp_in_ruleTerm733);
                    this_App_2=ruleApp();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_App_2; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 4 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:343:5: this_Uq_3= ruleUq
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTermAccess().getUqParserRuleCall_3()); 
                          
                    }
                    pushFollow(FOLLOW_ruleUq_in_ruleTerm760);
                    this_Uq_3=ruleUq();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Uq_3; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 5 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:352:6: ( ( '[' )=>this_Tapp_4= ruleTapp )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:352:6: ( ( '[' )=>this_Tapp_4= ruleTapp )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:352:7: ( '[' )=>this_Tapp_4= ruleTapp
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTermAccess().getTappParserRuleCall_4()); 
                          
                    }
                    pushFollow(FOLLOW_ruleTapp_in_ruleTerm795);
                    this_Tapp_4=ruleTapp();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Tapp_4; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }


                    }
                    break;
                case 6 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:364:5: this_Nrif_5= ruleNrif
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTermAccess().getNrifParserRuleCall_5()); 
                          
                    }
                    pushFollow(FOLLOW_ruleNrif_in_ruleTerm823);
                    this_Nrif_5=ruleNrif();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Nrif_5; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 7 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:374:5: this_Let_6= ruleLet
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTermAccess().getLetParserRuleCall_6()); 
                          
                    }
                    pushFollow(FOLLOW_ruleLet_in_ruleTerm850);
                    this_Let_6=ruleLet();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Let_6; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTerm"


    // $ANTLR start "entryRuleLet"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:390:1: entryRuleLet returns [EObject current=null] : iv_ruleLet= ruleLet EOF ;
    public final EObject entryRuleLet() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleLet = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:391:2: (iv_ruleLet= ruleLet EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:392:2: iv_ruleLet= ruleLet EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getLetRule()); 
            }
            pushFollow(FOLLOW_ruleLet_in_entryRuleLet885);
            iv_ruleLet=ruleLet();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleLet; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleLet895); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleLet"


    // $ANTLR start "ruleLet"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:399:1: ruleLet returns [EObject current=null] : (otherlv_0= 'let' ( (lv_var_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= '=' ( (lv_t1_5_0= ruleTerm ) ) otherlv_6= 'in' ( (lv_t2_7_0= ruleTerm ) ) ) ;
    public final EObject ruleLet() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_var_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_type_3_0 = null;

        EObject lv_t1_5_0 = null;

        EObject lv_t2_7_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:402:28: ( (otherlv_0= 'let' ( (lv_var_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= '=' ( (lv_t1_5_0= ruleTerm ) ) otherlv_6= 'in' ( (lv_t2_7_0= ruleTerm ) ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:403:1: (otherlv_0= 'let' ( (lv_var_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= '=' ( (lv_t1_5_0= ruleTerm ) ) otherlv_6= 'in' ( (lv_t2_7_0= ruleTerm ) ) )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:403:1: (otherlv_0= 'let' ( (lv_var_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= '=' ( (lv_t1_5_0= ruleTerm ) ) otherlv_6= 'in' ( (lv_t2_7_0= ruleTerm ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:403:3: otherlv_0= 'let' ( (lv_var_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= '=' ( (lv_t1_5_0= ruleTerm ) ) otherlv_6= 'in' ( (lv_t2_7_0= ruleTerm ) )
            {
            otherlv_0=(Token)match(input,19,FOLLOW_19_in_ruleLet932); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getLetAccess().getLetKeyword_0());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:407:1: ( (lv_var_1_0= RULE_VARIABLE ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:408:1: (lv_var_1_0= RULE_VARIABLE )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:408:1: (lv_var_1_0= RULE_VARIABLE )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:409:3: lv_var_1_0= RULE_VARIABLE
            {
            lv_var_1_0=(Token)match(input,RULE_VARIABLE,FOLLOW_RULE_VARIABLE_in_ruleLet949); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_var_1_0, grammarAccess.getLetAccess().getVarVARIABLETerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getLetRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"var",
                      		lv_var_1_0, 
                      		"VARIABLE");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,20,FOLLOW_20_in_ruleLet966); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getLetAccess().getColonKeyword_2());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:429:1: ( (lv_type_3_0= ruleT ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:430:1: (lv_type_3_0= ruleT )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:430:1: (lv_type_3_0= ruleT )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:431:3: lv_type_3_0= ruleT
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getLetAccess().getTypeTParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleT_in_ruleLet987);
            lv_type_3_0=ruleT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getLetRule());
              	        }
                     		set(
                     			current, 
                     			"type",
                      		lv_type_3_0, 
                      		"T");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_4=(Token)match(input,18,FOLLOW_18_in_ruleLet999); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getLetAccess().getEqualsSignKeyword_4());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:451:1: ( (lv_t1_5_0= ruleTerm ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:452:1: (lv_t1_5_0= ruleTerm )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:452:1: (lv_t1_5_0= ruleTerm )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:453:3: lv_t1_5_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getLetAccess().getT1TermParserRuleCall_5_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleLet1020);
            lv_t1_5_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getLetRule());
              	        }
                     		set(
                     			current, 
                     			"t1",
                      		lv_t1_5_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_6=(Token)match(input,21,FOLLOW_21_in_ruleLet1032); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_6, grammarAccess.getLetAccess().getInKeyword_6());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:473:1: ( (lv_t2_7_0= ruleTerm ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:474:1: (lv_t2_7_0= ruleTerm )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:474:1: (lv_t2_7_0= ruleTerm )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:475:3: lv_t2_7_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getLetAccess().getT2TermParserRuleCall_7_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleLet1053);
            lv_t2_7_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getLetRule());
              	        }
                     		set(
                     			current, 
                     			"t2",
                      		lv_t2_7_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleLet"


    // $ANTLR start "entryRuleVar"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:499:1: entryRuleVar returns [EObject current=null] : iv_ruleVar= ruleVar EOF ;
    public final EObject entryRuleVar() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleVar = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:500:2: (iv_ruleVar= ruleVar EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:501:2: iv_ruleVar= ruleVar EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getVarRule()); 
            }
            pushFollow(FOLLOW_ruleVar_in_entryRuleVar1089);
            iv_ruleVar=ruleVar();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleVar; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleVar1099); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleVar"


    // $ANTLR start "ruleVar"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:508:1: ruleVar returns [EObject current=null] : ( (lv_name_0_0= RULE_VARIABLE ) ) ;
    public final EObject ruleVar() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:511:28: ( ( (lv_name_0_0= RULE_VARIABLE ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:512:1: ( (lv_name_0_0= RULE_VARIABLE ) )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:512:1: ( (lv_name_0_0= RULE_VARIABLE ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:513:1: (lv_name_0_0= RULE_VARIABLE )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:513:1: (lv_name_0_0= RULE_VARIABLE )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:514:3: lv_name_0_0= RULE_VARIABLE
            {
            lv_name_0_0=(Token)match(input,RULE_VARIABLE,FOLLOW_RULE_VARIABLE_in_ruleVar1140); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_0_0, grammarAccess.getVarAccess().getNameVARIABLETerminalRuleCall_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getVarRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_0_0, 
                      		"VARIABLE");
              	    
            }

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleVar"


    // $ANTLR start "entryRuleAbs"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:538:1: entryRuleAbs returns [EObject current=null] : iv_ruleAbs= ruleAbs EOF ;
    public final EObject entryRuleAbs() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAbs = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:539:2: (iv_ruleAbs= ruleAbs EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:540:2: iv_ruleAbs= ruleAbs EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAbsRule()); 
            }
            pushFollow(FOLLOW_ruleAbs_in_entryRuleAbs1180);
            iv_ruleAbs=ruleAbs();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAbs; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleAbs1190); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAbs"


    // $ANTLR start "ruleAbs"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:547:1: ruleAbs returns [EObject current=null] : (otherlv_0= '\\\\(' ( (lv_param_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= ').' ( (lv_body_5_0= ruleTerm ) ) ) ;
    public final EObject ruleAbs() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_param_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        EObject lv_type_3_0 = null;

        EObject lv_body_5_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:550:28: ( (otherlv_0= '\\\\(' ( (lv_param_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= ').' ( (lv_body_5_0= ruleTerm ) ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:551:1: (otherlv_0= '\\\\(' ( (lv_param_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= ').' ( (lv_body_5_0= ruleTerm ) ) )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:551:1: (otherlv_0= '\\\\(' ( (lv_param_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= ').' ( (lv_body_5_0= ruleTerm ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:551:3: otherlv_0= '\\\\(' ( (lv_param_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= ').' ( (lv_body_5_0= ruleTerm ) )
            {
            otherlv_0=(Token)match(input,22,FOLLOW_22_in_ruleAbs1227); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getAbsAccess().getReverseSolidusLeftParenthesisKeyword_0());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:555:1: ( (lv_param_1_0= RULE_VARIABLE ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:556:1: (lv_param_1_0= RULE_VARIABLE )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:556:1: (lv_param_1_0= RULE_VARIABLE )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:557:3: lv_param_1_0= RULE_VARIABLE
            {
            lv_param_1_0=(Token)match(input,RULE_VARIABLE,FOLLOW_RULE_VARIABLE_in_ruleAbs1244); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_param_1_0, grammarAccess.getAbsAccess().getParamVARIABLETerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getAbsRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"param",
                      		lv_param_1_0, 
                      		"VARIABLE");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,20,FOLLOW_20_in_ruleAbs1261); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getAbsAccess().getColonKeyword_2());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:577:1: ( (lv_type_3_0= ruleT ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:578:1: (lv_type_3_0= ruleT )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:578:1: (lv_type_3_0= ruleT )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:579:3: lv_type_3_0= ruleT
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getAbsAccess().getTypeTParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleT_in_ruleAbs1282);
            lv_type_3_0=ruleT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getAbsRule());
              	        }
                     		set(
                     			current, 
                     			"type",
                      		lv_type_3_0, 
                      		"T");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_4=(Token)match(input,23,FOLLOW_23_in_ruleAbs1294); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getAbsAccess().getRightParenthesisFullStopKeyword_4());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:599:1: ( (lv_body_5_0= ruleTerm ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:600:1: (lv_body_5_0= ruleTerm )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:600:1: (lv_body_5_0= ruleTerm )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:601:3: lv_body_5_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getAbsAccess().getBodyTermParserRuleCall_5_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleAbs1315);
            lv_body_5_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getAbsRule());
              	        }
                     		set(
                     			current, 
                     			"body",
                      		lv_body_5_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAbs"


    // $ANTLR start "entryRuleApp"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:625:1: entryRuleApp returns [EObject current=null] : iv_ruleApp= ruleApp EOF ;
    public final EObject entryRuleApp() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleApp = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:626:2: (iv_ruleApp= ruleApp EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:627:2: iv_ruleApp= ruleApp EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAppRule()); 
            }
            pushFollow(FOLLOW_ruleApp_in_entryRuleApp1351);
            iv_ruleApp=ruleApp();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleApp; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleApp1361); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleApp"


    // $ANTLR start "ruleApp"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:634:1: ruleApp returns [EObject current=null] : (otherlv_0= '(' ( (lv_t1_1_0= ruleTerm ) ) otherlv_2= ')' ( (lv_t2_3_0= ruleTerm ) ) ) ;
    public final EObject ruleApp() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        EObject lv_t1_1_0 = null;

        EObject lv_t2_3_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:637:28: ( (otherlv_0= '(' ( (lv_t1_1_0= ruleTerm ) ) otherlv_2= ')' ( (lv_t2_3_0= ruleTerm ) ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:638:1: (otherlv_0= '(' ( (lv_t1_1_0= ruleTerm ) ) otherlv_2= ')' ( (lv_t2_3_0= ruleTerm ) ) )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:638:1: (otherlv_0= '(' ( (lv_t1_1_0= ruleTerm ) ) otherlv_2= ')' ( (lv_t2_3_0= ruleTerm ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:638:3: otherlv_0= '(' ( (lv_t1_1_0= ruleTerm ) ) otherlv_2= ')' ( (lv_t2_3_0= ruleTerm ) )
            {
            otherlv_0=(Token)match(input,24,FOLLOW_24_in_ruleApp1398); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getAppAccess().getLeftParenthesisKeyword_0());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:642:1: ( (lv_t1_1_0= ruleTerm ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:643:1: (lv_t1_1_0= ruleTerm )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:643:1: (lv_t1_1_0= ruleTerm )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:644:3: lv_t1_1_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getAppAccess().getT1TermParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleApp1419);
            lv_t1_1_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getAppRule());
              	        }
                     		set(
                     			current, 
                     			"t1",
                      		lv_t1_1_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,25,FOLLOW_25_in_ruleApp1431); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getAppAccess().getRightParenthesisKeyword_2());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:664:1: ( (lv_t2_3_0= ruleTerm ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:665:1: (lv_t2_3_0= ruleTerm )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:665:1: (lv_t2_3_0= ruleTerm )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:666:3: lv_t2_3_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getAppAccess().getT2TermParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleApp1452);
            lv_t2_3_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getAppRule());
              	        }
                     		set(
                     			current, 
                     			"t2",
                      		lv_t2_3_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleApp"


    // $ANTLR start "entryRuleUq"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:690:1: entryRuleUq returns [EObject current=null] : iv_ruleUq= ruleUq EOF ;
    public final EObject entryRuleUq() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleUq = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:691:2: (iv_ruleUq= ruleUq EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:692:2: iv_ruleUq= ruleUq EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getUqRule()); 
            }
            pushFollow(FOLLOW_ruleUq_in_entryRuleUq1488);
            iv_ruleUq=ruleUq();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleUq; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleUq1498); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleUq"


    // $ANTLR start "ruleUq"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:699:1: ruleUq returns [EObject current=null] : (otherlv_0= '/\\\\' ( (lv_var_1_0= RULE_TVAR ) ) otherlv_2= '.' ( (lv_term_3_0= ruleTerm ) ) ) ;
    public final EObject ruleUq() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_var_1_0=null;
        Token otherlv_2=null;
        EObject lv_term_3_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:702:28: ( (otherlv_0= '/\\\\' ( (lv_var_1_0= RULE_TVAR ) ) otherlv_2= '.' ( (lv_term_3_0= ruleTerm ) ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:703:1: (otherlv_0= '/\\\\' ( (lv_var_1_0= RULE_TVAR ) ) otherlv_2= '.' ( (lv_term_3_0= ruleTerm ) ) )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:703:1: (otherlv_0= '/\\\\' ( (lv_var_1_0= RULE_TVAR ) ) otherlv_2= '.' ( (lv_term_3_0= ruleTerm ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:703:3: otherlv_0= '/\\\\' ( (lv_var_1_0= RULE_TVAR ) ) otherlv_2= '.' ( (lv_term_3_0= ruleTerm ) )
            {
            otherlv_0=(Token)match(input,26,FOLLOW_26_in_ruleUq1535); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getUqAccess().getSolidusReverseSolidusKeyword_0());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:707:1: ( (lv_var_1_0= RULE_TVAR ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:708:1: (lv_var_1_0= RULE_TVAR )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:708:1: (lv_var_1_0= RULE_TVAR )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:709:3: lv_var_1_0= RULE_TVAR
            {
            lv_var_1_0=(Token)match(input,RULE_TVAR,FOLLOW_RULE_TVAR_in_ruleUq1552); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_var_1_0, grammarAccess.getUqAccess().getVarTVARTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getUqRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"var",
                      		lv_var_1_0, 
                      		"TVAR");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,27,FOLLOW_27_in_ruleUq1569); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getUqAccess().getFullStopKeyword_2());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:729:1: ( (lv_term_3_0= ruleTerm ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:730:1: (lv_term_3_0= ruleTerm )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:730:1: (lv_term_3_0= ruleTerm )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:731:3: lv_term_3_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getUqAccess().getTermTermParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleUq1590);
            lv_term_3_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getUqRule());
              	        }
                     		set(
                     			current, 
                     			"term",
                      		lv_term_3_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleUq"


    // $ANTLR start "entryRuleTapp"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:755:1: entryRuleTapp returns [EObject current=null] : iv_ruleTapp= ruleTapp EOF ;
    public final EObject entryRuleTapp() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTapp = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:756:2: (iv_ruleTapp= ruleTapp EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:757:2: iv_ruleTapp= ruleTapp EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getTappRule()); 
            }
            pushFollow(FOLLOW_ruleTapp_in_entryRuleTapp1626);
            iv_ruleTapp=ruleTapp();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleTapp; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleTapp1636); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTapp"


    // $ANTLR start "ruleTapp"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:764:1: ruleTapp returns [EObject current=null] : ( ( ( '[' )=>otherlv_0= '[' ) ( (lv_term_1_0= ruleTerm ) ) otherlv_2= ']' ( (lv_type_3_0= ruleT ) ) ) ;
    public final EObject ruleTapp() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        EObject lv_term_1_0 = null;

        EObject lv_type_3_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:767:28: ( ( ( ( '[' )=>otherlv_0= '[' ) ( (lv_term_1_0= ruleTerm ) ) otherlv_2= ']' ( (lv_type_3_0= ruleT ) ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:768:1: ( ( ( '[' )=>otherlv_0= '[' ) ( (lv_term_1_0= ruleTerm ) ) otherlv_2= ']' ( (lv_type_3_0= ruleT ) ) )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:768:1: ( ( ( '[' )=>otherlv_0= '[' ) ( (lv_term_1_0= ruleTerm ) ) otherlv_2= ']' ( (lv_type_3_0= ruleT ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:768:2: ( ( '[' )=>otherlv_0= '[' ) ( (lv_term_1_0= ruleTerm ) ) otherlv_2= ']' ( (lv_type_3_0= ruleT ) )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:768:2: ( ( '[' )=>otherlv_0= '[' )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:768:3: ( '[' )=>otherlv_0= '['
            {
            otherlv_0=(Token)match(input,28,FOLLOW_28_in_ruleTapp1681); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getTappAccess().getLeftSquareBracketKeyword_0());
                  
            }

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:773:2: ( (lv_term_1_0= ruleTerm ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:774:1: (lv_term_1_0= ruleTerm )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:774:1: (lv_term_1_0= ruleTerm )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:775:3: lv_term_1_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getTappAccess().getTermTermParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleTapp1703);
            lv_term_1_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getTappRule());
              	        }
                     		set(
                     			current, 
                     			"term",
                      		lv_term_1_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,29,FOLLOW_29_in_ruleTapp1715); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getTappAccess().getRightSquareBracketKeyword_2());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:795:1: ( (lv_type_3_0= ruleT ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:796:1: (lv_type_3_0= ruleT )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:796:1: (lv_type_3_0= ruleT )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:797:3: lv_type_3_0= ruleT
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getTappAccess().getTypeTParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleT_in_ruleTapp1736);
            lv_type_3_0=ruleT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getTappRule());
              	        }
                     		set(
                     			current, 
                     			"type",
                      		lv_type_3_0, 
                      		"T");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTapp"


    // $ANTLR start "entryRuleT"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:821:1: entryRuleT returns [EObject current=null] : iv_ruleT= ruleT EOF ;
    public final EObject entryRuleT() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleT = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:822:2: (iv_ruleT= ruleT EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:823:2: iv_ruleT= ruleT EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getTRule()); 
            }
            pushFollow(FOLLOW_ruleT_in_entryRuleT1772);
            iv_ruleT=ruleT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleT; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleT1782); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleT"


    // $ANTLR start "ruleT"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:830:1: ruleT returns [EObject current=null] : (this_T1_0= ruleT1 | this_T2_1= ruleT2 | this_T3_2= ruleT3 | this_Trif_3= ruleTrif ) ;
    public final EObject ruleT() throws RecognitionException {
        EObject current = null;

        EObject this_T1_0 = null;

        EObject this_T2_1 = null;

        EObject this_T3_2 = null;

        EObject this_Trif_3 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:833:28: ( (this_T1_0= ruleT1 | this_T2_1= ruleT2 | this_T3_2= ruleT3 | this_Trif_3= ruleTrif ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:834:1: (this_T1_0= ruleT1 | this_T2_1= ruleT2 | this_T3_2= ruleT3 | this_Trif_3= ruleTrif )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:834:1: (this_T1_0= ruleT1 | this_T2_1= ruleT2 | this_T3_2= ruleT3 | this_Trif_3= ruleTrif )
            int alt6=4;
            switch ( input.LA(1) ) {
            case RULE_TVAR:
                {
                alt6=1;
                }
                break;
            case 24:
                {
                alt6=2;
                }
                break;
            case 31:
                {
                alt6=3;
                }
                break;
            case RULE_ID:
                {
                alt6=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 6, 0, input);

                throw nvae;
            }

            switch (alt6) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:835:5: this_T1_0= ruleT1
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTAccess().getT1ParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleT1_in_ruleT1829);
                    this_T1_0=ruleT1();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_T1_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:845:5: this_T2_1= ruleT2
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTAccess().getT2ParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleT2_in_ruleT1856);
                    this_T2_1=ruleT2();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_T2_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 3 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:855:5: this_T3_2= ruleT3
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTAccess().getT3ParserRuleCall_2()); 
                          
                    }
                    pushFollow(FOLLOW_ruleT3_in_ruleT1883);
                    this_T3_2=ruleT3();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_T3_2; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 4 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:865:5: this_Trif_3= ruleTrif
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTAccess().getTrifParserRuleCall_3()); 
                          
                    }
                    pushFollow(FOLLOW_ruleTrif_in_ruleT1910);
                    this_Trif_3=ruleTrif();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Trif_3; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleT"


    // $ANTLR start "entryRuleT1"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:881:1: entryRuleT1 returns [EObject current=null] : iv_ruleT1= ruleT1 EOF ;
    public final EObject entryRuleT1() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleT1 = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:882:2: (iv_ruleT1= ruleT1 EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:883:2: iv_ruleT1= ruleT1 EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getT1Rule()); 
            }
            pushFollow(FOLLOW_ruleT1_in_entryRuleT11945);
            iv_ruleT1=ruleT1();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleT1; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleT11955); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleT1"


    // $ANTLR start "ruleT1"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:890:1: ruleT1 returns [EObject current=null] : ( ( (lv_p_0_0= RULE_TVAR ) ) (otherlv_1= '->' ( (lv_c_2_0= ruleT ) ) )* ) ;
    public final EObject ruleT1() throws RecognitionException {
        EObject current = null;

        Token lv_p_0_0=null;
        Token otherlv_1=null;
        EObject lv_c_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:893:28: ( ( ( (lv_p_0_0= RULE_TVAR ) ) (otherlv_1= '->' ( (lv_c_2_0= ruleT ) ) )* ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:894:1: ( ( (lv_p_0_0= RULE_TVAR ) ) (otherlv_1= '->' ( (lv_c_2_0= ruleT ) ) )* )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:894:1: ( ( (lv_p_0_0= RULE_TVAR ) ) (otherlv_1= '->' ( (lv_c_2_0= ruleT ) ) )* )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:894:2: ( (lv_p_0_0= RULE_TVAR ) ) (otherlv_1= '->' ( (lv_c_2_0= ruleT ) ) )*
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:894:2: ( (lv_p_0_0= RULE_TVAR ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:895:1: (lv_p_0_0= RULE_TVAR )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:895:1: (lv_p_0_0= RULE_TVAR )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:896:3: lv_p_0_0= RULE_TVAR
            {
            lv_p_0_0=(Token)match(input,RULE_TVAR,FOLLOW_RULE_TVAR_in_ruleT11997); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_p_0_0, grammarAccess.getT1Access().getPTVARTerminalRuleCall_0_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getT1Rule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"p",
                      		lv_p_0_0, 
                      		"TVAR");
              	    
            }

            }


            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:912:2: (otherlv_1= '->' ( (lv_c_2_0= ruleT ) ) )*
            loop7:
            do {
                int alt7=2;
                int LA7_0 = input.LA(1);

                if ( (LA7_0==30) ) {
                    alt7=1;
                }


                switch (alt7) {
            	case 1 :
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:912:4: otherlv_1= '->' ( (lv_c_2_0= ruleT ) )
            	    {
            	    otherlv_1=(Token)match(input,30,FOLLOW_30_in_ruleT12015); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_1, grammarAccess.getT1Access().getHyphenMinusGreaterThanSignKeyword_1_0());
            	          
            	    }
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:916:1: ( (lv_c_2_0= ruleT ) )
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:917:1: (lv_c_2_0= ruleT )
            	    {
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:917:1: (lv_c_2_0= ruleT )
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:918:3: lv_c_2_0= ruleT
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getT1Access().getCTParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleT_in_ruleT12036);
            	    lv_c_2_0=ruleT();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getT1Rule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"c",
            	              		lv_c_2_0, 
            	              		"T");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop7;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleT1"


    // $ANTLR start "entryRuleT2"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:942:1: entryRuleT2 returns [EObject current=null] : iv_ruleT2= ruleT2 EOF ;
    public final EObject entryRuleT2() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleT2 = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:943:2: (iv_ruleT2= ruleT2 EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:944:2: iv_ruleT2= ruleT2 EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getT2Rule()); 
            }
            pushFollow(FOLLOW_ruleT2_in_entryRuleT22074);
            iv_ruleT2=ruleT2();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleT2; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleT22084); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleT2"


    // $ANTLR start "ruleT2"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:951:1: ruleT2 returns [EObject current=null] : (otherlv_0= '(' ( (lv_p1_1_0= ruleT ) ) otherlv_2= ')' (otherlv_3= '->' ( (lv_c1_4_0= ruleT ) ) )* ) ;
    public final EObject ruleT2() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        EObject lv_p1_1_0 = null;

        EObject lv_c1_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:954:28: ( (otherlv_0= '(' ( (lv_p1_1_0= ruleT ) ) otherlv_2= ')' (otherlv_3= '->' ( (lv_c1_4_0= ruleT ) ) )* ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:955:1: (otherlv_0= '(' ( (lv_p1_1_0= ruleT ) ) otherlv_2= ')' (otherlv_3= '->' ( (lv_c1_4_0= ruleT ) ) )* )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:955:1: (otherlv_0= '(' ( (lv_p1_1_0= ruleT ) ) otherlv_2= ')' (otherlv_3= '->' ( (lv_c1_4_0= ruleT ) ) )* )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:955:3: otherlv_0= '(' ( (lv_p1_1_0= ruleT ) ) otherlv_2= ')' (otherlv_3= '->' ( (lv_c1_4_0= ruleT ) ) )*
            {
            otherlv_0=(Token)match(input,24,FOLLOW_24_in_ruleT22121); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getT2Access().getLeftParenthesisKeyword_0());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:959:1: ( (lv_p1_1_0= ruleT ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:960:1: (lv_p1_1_0= ruleT )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:960:1: (lv_p1_1_0= ruleT )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:961:3: lv_p1_1_0= ruleT
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getT2Access().getP1TParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleT_in_ruleT22142);
            lv_p1_1_0=ruleT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getT2Rule());
              	        }
                     		set(
                     			current, 
                     			"p1",
                      		lv_p1_1_0, 
                      		"T");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,25,FOLLOW_25_in_ruleT22154); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getT2Access().getRightParenthesisKeyword_2());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:981:1: (otherlv_3= '->' ( (lv_c1_4_0= ruleT ) ) )*
            loop8:
            do {
                int alt8=2;
                int LA8_0 = input.LA(1);

                if ( (LA8_0==30) ) {
                    alt8=1;
                }


                switch (alt8) {
            	case 1 :
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:981:3: otherlv_3= '->' ( (lv_c1_4_0= ruleT ) )
            	    {
            	    otherlv_3=(Token)match(input,30,FOLLOW_30_in_ruleT22167); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_3, grammarAccess.getT2Access().getHyphenMinusGreaterThanSignKeyword_3_0());
            	          
            	    }
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:985:1: ( (lv_c1_4_0= ruleT ) )
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:986:1: (lv_c1_4_0= ruleT )
            	    {
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:986:1: (lv_c1_4_0= ruleT )
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:987:3: lv_c1_4_0= ruleT
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getT2Access().getC1TParserRuleCall_3_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleT_in_ruleT22188);
            	    lv_c1_4_0=ruleT();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getT2Rule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"c1",
            	              		lv_c1_4_0, 
            	              		"T");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop8;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleT2"


    // $ANTLR start "entryRuleT3"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1011:1: entryRuleT3 returns [EObject current=null] : iv_ruleT3= ruleT3 EOF ;
    public final EObject entryRuleT3() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleT3 = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1012:2: (iv_ruleT3= ruleT3 EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1013:2: iv_ruleT3= ruleT3 EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getT3Rule()); 
            }
            pushFollow(FOLLOW_ruleT3_in_entryRuleT32226);
            iv_ruleT3=ruleT3();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleT3; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleT32236); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleT3"


    // $ANTLR start "ruleT3"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1020:1: ruleT3 returns [EObject current=null] : (otherlv_0= 'forall' ( (lv_var_1_0= RULE_TVAR ) ) ( (lv_t_2_0= ruleT ) ) ) ;
    public final EObject ruleT3() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_var_1_0=null;
        EObject lv_t_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1023:28: ( (otherlv_0= 'forall' ( (lv_var_1_0= RULE_TVAR ) ) ( (lv_t_2_0= ruleT ) ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1024:1: (otherlv_0= 'forall' ( (lv_var_1_0= RULE_TVAR ) ) ( (lv_t_2_0= ruleT ) ) )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1024:1: (otherlv_0= 'forall' ( (lv_var_1_0= RULE_TVAR ) ) ( (lv_t_2_0= ruleT ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1024:3: otherlv_0= 'forall' ( (lv_var_1_0= RULE_TVAR ) ) ( (lv_t_2_0= ruleT ) )
            {
            otherlv_0=(Token)match(input,31,FOLLOW_31_in_ruleT32273); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getT3Access().getForallKeyword_0());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1028:1: ( (lv_var_1_0= RULE_TVAR ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1029:1: (lv_var_1_0= RULE_TVAR )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1029:1: (lv_var_1_0= RULE_TVAR )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1030:3: lv_var_1_0= RULE_TVAR
            {
            lv_var_1_0=(Token)match(input,RULE_TVAR,FOLLOW_RULE_TVAR_in_ruleT32290); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_var_1_0, grammarAccess.getT3Access().getVarTVARTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getT3Rule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"var",
                      		lv_var_1_0, 
                      		"TVAR");
              	    
            }

            }


            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1046:2: ( (lv_t_2_0= ruleT ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1047:1: (lv_t_2_0= ruleT )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1047:1: (lv_t_2_0= ruleT )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1048:3: lv_t_2_0= ruleT
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getT3Access().getTTParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleT_in_ruleT32316);
            lv_t_2_0=ruleT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getT3Rule());
              	        }
                     		set(
                     			current, 
                     			"t",
                      		lv_t_2_0, 
                      		"T");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleT3"


    // $ANTLR start "entryRuleTypeDich"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1072:1: entryRuleTypeDich returns [EObject current=null] : iv_ruleTypeDich= ruleTypeDich EOF ;
    public final EObject entryRuleTypeDich() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTypeDich = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1073:2: (iv_ruleTypeDich= ruleTypeDich EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1074:2: iv_ruleTypeDich= ruleTypeDich EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getTypeDichRule()); 
            }
            pushFollow(FOLLOW_ruleTypeDich_in_entryRuleTypeDich2352);
            iv_ruleTypeDich=ruleTypeDich();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleTypeDich; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleTypeDich2362); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTypeDich"


    // $ANTLR start "ruleTypeDich"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1081:1: ruleTypeDich returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_type_2_0= ruleT ) ) ) ;
    public final EObject ruleTypeDich() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Token otherlv_1=null;
        EObject lv_type_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1084:28: ( ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_type_2_0= ruleT ) ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1085:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_type_2_0= ruleT ) ) )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1085:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_type_2_0= ruleT ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1085:2: ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_type_2_0= ruleT ) )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1085:2: ( (lv_name_0_0= RULE_ID ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1086:1: (lv_name_0_0= RULE_ID )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1086:1: (lv_name_0_0= RULE_ID )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1087:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTypeDich2404); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_0_0, grammarAccess.getTypeDichAccess().getNameIDTerminalRuleCall_0_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getTypeDichRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_0_0, 
                      		"ID");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,18,FOLLOW_18_in_ruleTypeDich2421); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getTypeDichAccess().getEqualsSignKeyword_1());
                  
            }
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1107:1: ( (lv_type_2_0= ruleT ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1108:1: (lv_type_2_0= ruleT )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1108:1: (lv_type_2_0= ruleT )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1109:3: lv_type_2_0= ruleT
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getTypeDichAccess().getTypeTParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleT_in_ruleTypeDich2442);
            lv_type_2_0=ruleT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getTypeDichRule());
              	        }
                     		set(
                     			current, 
                     			"type",
                      		lv_type_2_0, 
                      		"T");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTypeDich"


    // $ANTLR start "entryRuleTrif"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1133:1: entryRuleTrif returns [EObject current=null] : iv_ruleTrif= ruleTrif EOF ;
    public final EObject entryRuleTrif() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTrif = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1134:2: (iv_ruleTrif= ruleTrif EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1135:2: iv_ruleTrif= ruleTrif EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getTrifRule()); 
            }
            pushFollow(FOLLOW_ruleTrif_in_entryRuleTrif2478);
            iv_ruleTrif=ruleTrif();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleTrif; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleTrif2488); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTrif"


    // $ANTLR start "ruleTrif"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1142:1: ruleTrif returns [EObject current=null] : ( (otherlv_0= RULE_ID ) ) ;
    public final EObject ruleTrif() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;

         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1145:28: ( ( (otherlv_0= RULE_ID ) ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1146:1: ( (otherlv_0= RULE_ID ) )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1146:1: ( (otherlv_0= RULE_ID ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1147:1: (otherlv_0= RULE_ID )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1147:1: (otherlv_0= RULE_ID )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1148:3: otherlv_0= RULE_ID
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getTrifRule());
              	        }
                      
            }
            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTrif2532); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		newLeafNode(otherlv_0, grammarAccess.getTrifAccess().getNomeTypeDichCrossReference_0()); 
              	
            }

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTrif"

    // $ANTLR start synpred1_InternalMyDsl
    public final void synpred1_InternalMyDsl_fragment() throws RecognitionException {   
        // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:352:7: ( '[' )
        // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:352:9: '['
        {
        match(input,28,FOLLOW_28_in_synpred1_InternalMyDsl777); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred1_InternalMyDsl

    // Delegated rules

    public final boolean synpred1_InternalMyDsl() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred1_InternalMyDsl_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }


 

    public static final BitSet FOLLOW_ruleFileSF_in_entryRuleFileSF75 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleFileSF85 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleProg_in_ruleFileSF131 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleProg_in_entryRuleProg165 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleProg175 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_13_in_ruleProg213 = new BitSet(new long[]{0x0000000000008010L});
    public static final BitSet FOLLOW_ruleTypeDich_in_ruleProg235 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleProg247 = new BitSet(new long[]{0x0000000000008010L});
    public static final BitSet FOLLOW_15_in_ruleProg261 = new BitSet(new long[]{0x0000000000030000L});
    public static final BitSet FOLLOW_16_in_ruleProg276 = new BitSet(new long[]{0x0000000000008010L});
    public static final BitSet FOLLOW_ruleDich_in_ruleProg298 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleProg310 = new BitSet(new long[]{0x0000000000008010L});
    public static final BitSet FOLLOW_15_in_ruleProg324 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_17_in_ruleProg338 = new BitSet(new long[]{0x0000000015480030L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleProg359 = new BitSet(new long[]{0x0000000000008000L});
    public static final BitSet FOLLOW_15_in_ruleProg371 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDich_in_entryRuleDich407 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDich417 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleDich459 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleDich476 = new BitSet(new long[]{0x0000000015480030L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleDich497 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNrif_in_entryRuleNrif533 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleNrif543 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleNrif587 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTerm_in_entryRuleTerm622 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTerm632 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleVar_in_ruleTerm679 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbs_in_ruleTerm706 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleApp_in_ruleTerm733 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleUq_in_ruleTerm760 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTapp_in_ruleTerm795 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNrif_in_ruleTerm823 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLet_in_ruleTerm850 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLet_in_entryRuleLet885 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleLet895 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_19_in_ruleLet932 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_VARIABLE_in_ruleLet949 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_20_in_ruleLet966 = new BitSet(new long[]{0x0000000081000050L});
    public static final BitSet FOLLOW_ruleT_in_ruleLet987 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleLet999 = new BitSet(new long[]{0x0000000015480030L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleLet1020 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_21_in_ruleLet1032 = new BitSet(new long[]{0x0000000015480030L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleLet1053 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleVar_in_entryRuleVar1089 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleVar1099 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_VARIABLE_in_ruleVar1140 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbs_in_entryRuleAbs1180 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAbs1190 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_22_in_ruleAbs1227 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_VARIABLE_in_ruleAbs1244 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_20_in_ruleAbs1261 = new BitSet(new long[]{0x0000000081000050L});
    public static final BitSet FOLLOW_ruleT_in_ruleAbs1282 = new BitSet(new long[]{0x0000000000800000L});
    public static final BitSet FOLLOW_23_in_ruleAbs1294 = new BitSet(new long[]{0x0000000015480030L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleAbs1315 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleApp_in_entryRuleApp1351 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleApp1361 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_24_in_ruleApp1398 = new BitSet(new long[]{0x0000000015480030L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleApp1419 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_25_in_ruleApp1431 = new BitSet(new long[]{0x0000000015480030L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleApp1452 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleUq_in_entryRuleUq1488 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleUq1498 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_26_in_ruleUq1535 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_RULE_TVAR_in_ruleUq1552 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_27_in_ruleUq1569 = new BitSet(new long[]{0x0000000015480030L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleUq1590 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTapp_in_entryRuleTapp1626 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTapp1636 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_28_in_ruleTapp1681 = new BitSet(new long[]{0x0000000015480030L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleTapp1703 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleTapp1715 = new BitSet(new long[]{0x0000000081000050L});
    public static final BitSet FOLLOW_ruleT_in_ruleTapp1736 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleT_in_entryRuleT1772 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleT1782 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleT1_in_ruleT1829 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleT2_in_ruleT1856 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleT3_in_ruleT1883 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTrif_in_ruleT1910 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleT1_in_entryRuleT11945 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleT11955 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_TVAR_in_ruleT11997 = new BitSet(new long[]{0x0000000040000002L});
    public static final BitSet FOLLOW_30_in_ruleT12015 = new BitSet(new long[]{0x0000000081000050L});
    public static final BitSet FOLLOW_ruleT_in_ruleT12036 = new BitSet(new long[]{0x0000000040000002L});
    public static final BitSet FOLLOW_ruleT2_in_entryRuleT22074 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleT22084 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_24_in_ruleT22121 = new BitSet(new long[]{0x0000000081000050L});
    public static final BitSet FOLLOW_ruleT_in_ruleT22142 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_25_in_ruleT22154 = new BitSet(new long[]{0x0000000040000002L});
    public static final BitSet FOLLOW_30_in_ruleT22167 = new BitSet(new long[]{0x0000000081000050L});
    public static final BitSet FOLLOW_ruleT_in_ruleT22188 = new BitSet(new long[]{0x0000000040000002L});
    public static final BitSet FOLLOW_ruleT3_in_entryRuleT32226 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleT32236 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_31_in_ruleT32273 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_RULE_TVAR_in_ruleT32290 = new BitSet(new long[]{0x0000000081000050L});
    public static final BitSet FOLLOW_ruleT_in_ruleT32316 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTypeDich_in_entryRuleTypeDich2352 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTypeDich2362 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleTypeDich2404 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleTypeDich2421 = new BitSet(new long[]{0x0000000081000050L});
    public static final BitSet FOLLOW_ruleT_in_ruleTypeDich2442 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTrif_in_entryRuleTrif2478 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTrif2488 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleTrif2532 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_28_in_synpred1_InternalMyDsl777 = new BitSet(new long[]{0x0000000000000002L});

}